import { ChineseZodiacSignEnum } from '@/enums/chineseZodiacSignEnum';
import { GenderEnum } from '@/enums/genderEnum';
import { StarSignEnum } from '@/enums/starSignEnum';

/** 用户DTO */
export interface UserDto {
  /** 用户编号 */
  Id: string | bigint;

  /** 用户名 */
  UserName: string;
  /** 用户昵称 */
  NickName: string;
  /** 电子邮箱 */
  Email: string;
  /** 邮箱是否已确认 */
  EmailConfirmed: boolean;
  /** 手机号码 */
  PhoneNumber: string;
  /** 手机是否已确认 */
  PhoneConfirmed: boolean;

  /** 电子头像 */
  Avatar?: string;
  /** 电子签名 */
  Signature?: string;

  /** 性别 */
  Gender: GenderEnum;
  /** 生日 */
  Birthday: Date | null | undefined;
  /** 血型 */
  BloodType: string | null | undefined;
  /** 标签 */
  Tag: string[] | null | undefined;
  /** 头衔 */
  Title: string[] | null | undefined;
  /** 地址 */
  Address: string | null | undefined;
  /** 简介 */
  Profile: string | null | undefined;
  /** 个性签名 */
  Sign: string | null | undefined;

  /** 农历生日 */
  ChineseBirthday: Date | null | undefined;
  /** 年龄 */
  Age: number;
  /** 生肖 */
  ZodiacSign: ChineseZodiacSignEnum | null | undefined;
  /** 星座 */
  StarSign: StarSignEnum | null | undefined;

  /** 备注 */
  Remark: string;

  /** 当任何用户锁定结束时，UTC的日期和时间 */
  LockoutEnd: Date;
  /** 指示用户是否可以被锁定的标志 */
  LockoutEnabled: boolean;
  /** 当前用户失败的登录尝试次数 */
  AccessFailedCount: number;
  /** 是否锁定 */
  IsLocked: boolean;

  /** 创建时间 */
  CreatedTime: Date;
}

/** 简单用户输出DTO */
export interface UserOutputDtoSimple {
  /** 用户编号 */
  Id: string | bigint;
  /** 用户名 */
  UserName: string;
  /** 用户昵称 */
  NickName: string;
  /** 电子邮箱 */
  Email: string;
  /** 手机号码 */
  PhoneNumber: string;
}

/** 输出DTO:用户信息 */
export interface UserOutputDto {
  /** 用户编号 */
  Id: string | bigint;
  /** 用户名 */
  UserName: string;
  /** 用户昵称 */
  NickName: string;
  /** 电子邮箱 */
  Email: string;
  /** 邮箱是否已确认 */
  EmailConfirmed: boolean;
  /** 手机号码 */
  PhoneNumber: string;
  /** 手机是否已确认 */
  PhoneConfirmed: boolean;

  /** 性别 */
  Gender: GenderEnum;
  /** 生日 */
  Birthday: Date | null | undefined;
  /** 血型 */
  BloodType: string | null | undefined;
  /** 标签 */
  Tag: string[] | null | undefined;
  /** 头衔 */
  Title: string[] | null | undefined;
  /** 地址 */
  Address: string | null | undefined;
  /** 简介 */
  Profile: string | null | undefined;
  /** 个性签名 */
  Sign: string | null | undefined;

  /** 农历生日 */
  ChineseBirthday: Date | null | undefined;
  /** 年龄 */
  Age: number;
  /** 生肖 */
  ZodiacSign: ChineseZodiacSignEnum | null | undefined;
  /** 星座 */
  StarSign: StarSignEnum | null | undefined;

  /** 备注 */
  Remark: string;

  /** 主页 */
  HomePath: string;

  /** 当任何用户锁定结束时，UTC的日期和时间 */
  LockoutEnd: Date;
  /** 指示用户是否可以被锁定的标志 */
  LockoutEnabled: boolean;
  /** 当前用户失败的登录尝试次数 */
  AccessFailedCount: number;
  /** 是否锁定 */
  IsLocked: boolean;

  /** 创建时间 */
  CreatedTime: Date;

  /** 角色信息集合 */
  Roles: string[];

  /** 是否可更新的数据权限状态 */
  Updatable: boolean;
  /** 是否可删除的数据权限状态 */
  Deletable: boolean;
}

/** 输入DTO：用户信息 */
export interface UserInputDto {
  /** 用户编号 */
  Id: string | bigint;

  /** 用户名 */
  UserName: string;
  /** 用户昵称 */
  NickName: string;

  /** 电子邮箱 */
  Email: string;
  /** 邮箱是否已确认 */
  EmailConfirmed: boolean;
  /** 手机号码 */
  PhoneNumber: string;
  /** 手机是否已确认 */
  PhoneConfirmed: boolean;

  /** 电子头像 */
  Avatar?: string;
  /** 电子签名 */
  Signature?: string;

  /** 性别 */
  Gender: GenderEnum;
  /** 生日 */
  Birthday: Date | null | undefined;
  /** 血型 */
  BloodType: string | null | undefined;
  /** 标签 */
  Tag: string[] | null | undefined;
  /** 头衔 */
  Title: string[] | null | undefined;
  /** 地址 */
  Address: string | null | undefined;
  /** 简介 */
  Profile: string | null | undefined;
  /** 个性签名 */
  Sign: string | null | undefined;
  /** 备注 */
  Remark: string;

  /** 主页 */
  HomePath: string;

  /** 密码 */
  Password: string;

  /** 是否启用登录锁 */
  LockoutEnabled: boolean;
  /** 是否锁定 */
  IsLocked: boolean;
}

/** 用户节点 */
export interface UserNode {
  /** 用户编号 */
  Id: string | bigint;
  /** 用户名 */
  UserName: string;
  /** 用户昵称 */
  NickName: string;
  /** 锁定 */
  IsLocked: boolean;

  /** 是否选中 */
  IsChecked: boolean;
}
/** 用户组织机构节点 */
export interface UserOrganizationNode extends UserNode {
  /** 机构管理员 */
  Administrator: boolean;
  /** 机构经理 */
  Leader: boolean;
}

/** 用户设置角色DTO */
export interface UserSetRoleDto {
  /** 用户编号 */
  UserId: string | bigint;
  /** 要设置的角色编号 */
  RoleIds: (string | bigint)[];
}
/** 用户设置组织机构DTO */
export interface UserSetOrganizationDto {
  /** 用户编号 */
  UserId: string | bigint;
  /** 用户组织机构DTO */
  UserOrganizations: UserOrganizationDto[];
}
/** 用户组织机构DTO */
export interface UserOrganizationDto {
  /** 组织机构编号 */
  OrganizationId: string | bigint;
  /** 机构管理员 */
  Administrator: boolean;
  /** 机构经理 */
  Leader: boolean;
}

/** 用户设置模块DTO */
export interface UserSetModuleDto {
  /** 用户编号 */
  UserId: string | bigint;
  /** 要设置的模块编号 */
  ModuleIds: (string | bigint)[];
}
